package demo4;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-07-30
 * Time: 19:15
 */

//懒汉模式
public class Singleton {

    //设置私有对象,保证实例唯一
    private volatile static Singleton instance = null;

    public static Singleton getInstance(){
        //看线程是否初始完成,如果没有初始化完成,尝试加锁
        //如果完成初始化往下执行
        if(instance==null){//保证不重复获取锁,降低获取锁的效率
            //使用synchronized保证线程安全,保证其原子性
            synchronized(Singleton.class){
                //多个线程尝试初始化,产生了锁竞争,线程拿到锁之后看是否真正的需要实例化
                if(instance==null){
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

    private Singleton(){}//保证外部不能在new对象
}
